﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Data;
using EFITransmissao.Entidade;
using Dados;
using Dados.ConexaoSQL;
using Dados.ConexaoCE;
using EFITransmissao.Dados.ConexaoSQL;

namespace EFITransmissao.Dados.DAO
{
    public class DAOLeiturista
    {
        public DAOLeiturista() { }
                
        #region SQLServer

        public static DataTable ObterLeituristas()
        {
            DataTable retorno = new DataTable();
            retorno.Columns.Add("Nome",typeof(string));
            retorno.Columns.Add("Matricula", typeof(int));

            try
            {                
                MSSQLDataAccess ms = new MSSQLDataAccess();
                DataTable dt = ms.ExecutaConsulta("ObterLeituristas", null);                

                foreach (DataRow dr in dt.Rows)
                {
                    retorno.Rows.Add(dr["PastaServidor"].ToString(),
                                     int.Parse(dr["Matricula"].ToString()));
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return retorno;
        }

        public static Roteiro ObterRoteiroDisponivel(string matricula)
        {            
            Roteiro obj = new Roteiro();
            try
            {
                //System.Collections.Hashtable htParametro = new System.Collections.Hashtable();
                //htParametro["@matricula"] = matricula;

                //MSSQLDataAccess ms = new MSSQLDataAccess();
                //DataTable dt = ms.ExecutaConsulta("ObterRoteiroDisponivel", htParametro);
                
                EFITransmissao.Dados.ConexaoSQL.AcessoDados acd = new EFITransmissao.Dados.ConexaoSQL.AcessoDados();
                DataTable dt = acd.ObterStatusRoteiroDisponivel("ObterRoteiroDisponivel", matricula);

                foreach (DataRow dr in dt.Rows)
                {
                    obj.Matricula = dr["Matricula"].ToString();
                    obj.Remessa = int.Parse(dr["Remessa"].ToString());
                    obj.MesFat = dr["MesFat"].ToString();
                    obj.MinOrdem = dr["MinNumOrdem"].ToString();
                    obj.MaxOrdem = dr["MaxNumOrdem"].ToString();
                                        
                 }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return obj;
        }

        public static Roteiro ObterLeituraDisponivel(string matricula)
        {
            Roteiro obj = new Roteiro();
            try
            {                
                EFITransmissao.Dados.ConexaoSQL.AcessoDados acd = new EFITransmissao.Dados.ConexaoSQL.AcessoDados();
                DataTable dt = acd.ObterLeituraDisponivel("ObterLeituraDisponivel", matricula);

                foreach (DataRow dr in dt.Rows)
                {
                    obj.Matricula = dr["Matricula"].ToString();
                    obj.Remessa = int.Parse(dr["Remessa"].ToString());
                    obj.MesFat = dr["MesFat"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return obj;
        }

        public static bool ObterStatusRoteiroDisponivel(string matricula)
        {
            bool retorno = false;

            try
            {
                
                EFITransmissao.Dados.ConexaoSQL.AcessoDados acd = new EFITransmissao.Dados.ConexaoSQL.AcessoDados();
                DataTable dt = acd.ObterStatusRoteiroDisponivel("ObterRoteiroDisponivel", matricula);

                if (dt.Rows.Count > 0)
                    retorno = true;
                
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return retorno;
        }
        
        public static bool ObterStatusLeituraDisponivel(Roteiro obj)
        {
            bool retorno = false;

            try
            {                
                EFITransmissao.Dados.ConexaoSQL.AcessoDados acd = new EFITransmissao.Dados.ConexaoSQL.AcessoDados();
                DataTable dt = acd.ObterStatusLeituraDisponivel("ObterStatusLeituraDisponivelKey", obj);

                if (dt.Rows.Count > 0)
                    retorno = true;

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return retorno;
        }

        public static bool ObterStatusRoteiroDisponivel(Roteiro obj)
        {
            bool retorno = false;

            try
            {
                EFITransmissao.Dados.ConexaoSQL.AcessoDados acd = new EFITransmissao.Dados.ConexaoSQL.AcessoDados();
                DataTable dt = acd.ObterStatusLeituraDisponivel("ObterStatusRoteiroDisponivelKey", obj);

                if (dt.Rows.Count > 0)                
                    retorno = true;

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return retorno;
        }

        public static void InserindoControleLeituraSQL(Roteiro obj)
        {            
            try
            {                
                AcessoDados acd = new AcessoDados();
                acd.InserindoControleLeituraSQL("InserindoControleLeituraSQL", obj);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return;
        }

        /// <summary>
        /// Atualiza Controle do Roteiro (Envio).
        /// </summary>
        /// <param name="obj"></param>
        public static void AtualizandoControleRoteiroSQL(Roteiro obj)
        {
            try
            {
                AcessoDados acd = new AcessoDados();
                acd.AtualizandoControleSQL("AtualizandoControleRoteiroSQL", obj);                
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return;
        }

        /// <summary>
        /// Atualiza Controle da Leitura (Retorno).
        /// </summary>
        /// <param name="obj"></param>
        public static void AtualizandoControleLeituraSQL(Roteiro obj)
        {
            try
            {
                AcessoDados acd = new AcessoDados();
                acd.AtualizandoControleSQL("AtualizandoControleLeituraSQL", obj);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return;
        }

        #endregion

        #region SQLCE dbEFISulg

        public static void DeletarLeituristas()
        {
            try
            {
                CEMSDataAccess ceMS = new CEMSDataAccess();
                ceMS.ExecutaAtualizacao("deleteLeituristas", null);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        public static string ObterMatriculaCE(string nome)
        {
            string retorno = string.Empty;

            try
            {
                System.Collections.Hashtable htParametro = new System.Collections.Hashtable();
                htParametro["@nome"] = nome;
                
                CEMSDataAccess ms = new CEMSDataAccess();
                DataTable dt = ms.ExecutaConsulta("ObterMatriculaCE", htParametro);

                foreach (DataRow dr in dt.Rows)
                {
                    retorno = dr["Matricula"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return retorno;
        }

        public static void InserirLeituristaCE()
        {
            string d_imp = @"\\ALFA\Municipios\Estancia\ColetadeLeitura\Roteiro\";
            string d_exp = @"\\ALFA\Municipios\Estancia\ColetadeLeitura\Leitura\";

            DeletarLeituristas();

            try
            {
                foreach (DataRow dr in ObterLeituristas().Rows)
                {   
                    System.Collections.Hashtable htParametro = new System.Collections.Hashtable();
                    htParametro["@nome"] = dr["Nome"].ToString();
                    htParametro["@matricula"] = dr["Matricula"].ToString();
                    htParametro["@d_imp"] = d_imp + dr["Nome"].ToString();
                    htParametro["@d_exp"] = d_exp + dr["Nome"].ToString();

                    CEMSDataAccess ms = new CEMSDataAccess();
                    ms.ExecutaAtualizacao("InserirLeituristas", htParametro);
                    
                }
                
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        public static List<string> ObterLeituristasCE()
        {
            List<string> tbl = new List<string>();
            
            try
            {
                CEMSDataAccess ms = new CEMSDataAccess();
                DataTable dt = ms.ExecutaConsulta("ObterListaLeiturista", null);
                                
                if (dt.Rows.Count > 0)
                    tbl.Add(string.Empty);

                foreach (DataRow dr in dt.Rows)
                {
                    tbl.Add(dr["Nome"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return tbl;
        }

        public static int ValidaMatricula(string nome)
        {
            int retorno = 0;
            try
            {
                System.Collections.Hashtable htParametro = new System.Collections.Hashtable();
                htParametro["@nome"] = nome;

                CEMSDataAccess ceMs = new CEMSDataAccess();
                DataTable dt = ceMs.ExecutaConsulta("ObterMatricula", htParametro);

                foreach (DataRow dr in dt.Rows)
                {
                    retorno = int.Parse(dr["Matricula"].ToString());
                }
                    
            }
            catch (Exception ex)
            {
                
                throw new Exception(ex.Message);
            }
            return retorno;
        }

        public static string ObterDiretorioImportacao(string nome)
        {
            string retorno = string.Empty;
            try
            {
                System.Collections.Hashtable htParametro = new System.Collections.Hashtable();
                htParametro["@nome"] = nome;

                CEMSDataAccess ceMs = new CEMSDataAccess();
                DataTable dt = ceMs.ExecutaConsulta("ObterDiretorioImportacao", htParametro);

                foreach (DataRow dr in dt.Rows)
                {
                    retorno = dr["Diretorio_imp"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return retorno;
        }

        public static string ObterDiretorioExportacao(string nome)
        {
            string retorno = string.Empty;
            try
            {
                System.Collections.Hashtable htParametro = new System.Collections.Hashtable();
                htParametro["@nome"] = nome;

                CEMSDataAccess ceMs = new CEMSDataAccess();
                DataTable dt = ceMs.ExecutaConsulta("ObterDiretorioExportacao", htParametro);

                foreach (DataRow dr in dt.Rows)
                {
                    retorno = dr["Diretorio_exp"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return retorno;
        }

        public static string ObterNomeLeiturista(int matricula)
        {
            string retorno = string.Empty;
            try
            {
                System.Collections.Hashtable htParametro = new System.Collections.Hashtable();
                htParametro["@matricula"] = matricula;

                CEMSDataAccess ceMs = new CEMSDataAccess();
                DataTable dt = ceMs.ExecutaConsulta("ObterNomeLeiturista", htParametro);

                foreach (DataRow dr in dt.Rows)
                {
                    retorno = dr["Nome"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return retorno;
        }

        #endregion
                
        #region SQLCE dbLeitura

        private static string conexaoDB()
        {
            string stringconexao = @"Persist Security Info = false; 
                                   Data Source = .\Program Files\efi_sulgipe\Leituras.sdf";
            return stringconexao;    
        }

        public static bool ObterStatusReceberRoteiro()
        {
            bool retorno = false;
            try
            {
                CEMSDataAccess ceMs = new CEMSDataAccess(conexaoDB());
                DataTable dt = ceMs.ExecutaConsulta("ObterStatusRecRoteiro", null);

                foreach (DataRow dr in dt.Rows)
                {
                    if (int.Parse(dr["RoteiroRecebido"].ToString()) == 0)
                    {
                        retorno = false;
                    }
                    else
                    {
                        retorno = true;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return retorno;
        }

        #endregion
    }    
    
}
